home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (DO) / Softdisk Magazette Volume 2, No. 07 (1983-03)(Softdisk)(Side B).zip / Softdisk Magazette Volume 2, No. 07 (1983-03)(Softdisk)(Side B).do / VAR.KEEPER.bas < prev   
BASIC Source File  |  1996-12-24  |  17KB  |  205 lines

  1. 10  REM (                         ) 25 SPACES IN BRACKETS
  2. 20  GOTO 2000: REM --------------<CTRL-M><CTRL-M>       DEMO PROGRAM FOR STORING<CTRL-M><CTRL-M>       AND RETRIEVING<CTRL-M><CTRL-M>       NUMBERS (100&200)<CTRL-M><CTRL-M>       AND STRINGS (300&400)<CTRL-M><CTRL-M>       WHEN VARIABLES CLEARED<CTRL-M><CTRL-M>       AS IN 'RUN' OR 'CLEAR'.<CTRL-J>
  3. 30  REM --------------------<CTRL-M><CTRL-M>       IF REM (   ) IS FIRST<CTRL-M><CTRL-M>       LINE OF PROGRAM<CTRL-M><CTRL-M>       FIRST SPACE INSIDE ()<CTRL-M><CTRL-M>       IS MEMORY LOCATION 2055<CTRL-M><CTRL-M>       PUT PLENTY OF SPACES IN<CTRL-M><CTRL-M>       FIRST LINE & READ MORE<CTRL-M><CTRL-M>       THAN MAX STRING LENGTH<CTRL-J>
  4. 40  REM *************************<CTRL-M><CTRL-M>       FOR DEMO TYPE AS FOLLOWS:<CTRL-M><CTRL-M>       RUN 100<CTRL-M><CTRL-M>       RUN 200<CTRL-M><CTRL-M>       RUN 300<CTRL-M><CTRL-M>       RUN 400<CTRL-M><CTRL-M>*********************************<CTRL-J>
  5. 100  REM NUMBERS:<CTRL-M><CTRL-M>       IF NUMBER IS ONE DIGIT<CTRL-M><CTRL-M>       POKE NUMBER + 112<CTRL-M><CTRL-M>       TO HAVE IT SHOW CORRECTLY<CTRL-M><CTRL-M>    ==>MAX NUMBER IN ONE<CTRL-M><CTRL-M>       MEMORY SLOT IS 255!<CTRL-M><CTRL-M>    ==>FOR GREATER THAN 255<CTRL-M><CTRL-M>       USE STRINGS AND VAL(A$)<CTRL-J>
  6. 110  REM EXAMPLE: TO SAVE 5
  7. 120  CLEAR : FOR I = 1 TO 25: POKE 2054 +I,32: NEXT : REM <CTRL-M><CTRL-M>       REMOVE PREVIOUS VALUES<CTRL-J>
  8. 130 X = 5
  9. 140  POKE 2055,X +112
  10. 150  REM NOW LIST LINE 10
  11. 160  HOME : LIST 10
  12. 170  GOSUB 3010
  13. 180  VTAB 23: HTAB 14: FLASH : PRINT "TYPE:";: NORMAL : PRINT " RUN 200";
  14. 190  END 
  15. 200  REM <CTRL-M><CTRL-M>       PEEK TO GET IT BACK<CTRL-J>
  16. 210  VTAB 11: HTAB 8: PRINT " TO GET IT BACK JUST PEEK": PRINT : HTAB 11: PRINT "WHEREVER YOU PUT IT": PRINT : PRINT 
  17. 220  HTAB 6: PRINT "(SUBTRACT 112 FOR A SINGLE DIGIT!)": PRINT : PRINT 
  18. 230  HTAB 15:Y =  PEEK(2055) -112: PRINT "==> Y=";Y;" <=="
  19. 240  VTAB 21: HTAB 1: CALL  -958: VTAB 23: HTAB 14: FLASH : PRINT "TYPE:";: NORMAL : PRINT " RUN 300";: NORMAL 
  20. 250  END 
  21. 300  REM -----------------------<CTRL-M><CTRL-M>       FOR STRINGS USE<CTRL-M><CTRL-M>       ASC(A$) AND CHR$(X)<CTRL-J>
  22. 310  REM EXAMPLE: SAVE FILE NAME
  23. 320 A$ = "FILENAME OR 12345678"
  24. 325  HOME : VTAB 13: PRINT "EXAMPLE: KEEP A$= NAME OF A FILE NAMED": PRINT : HTAB 1: PRINT "'FILENAME' THROUGH  A CLEAR OR A RUN.": PRINT : HTAB 5: PRINT "(OR A NUMBER LESS THAN 0 OR >9)"
  25. 330  FOR I = 1 TO  LEN(A$)
  26. 340 C$ =  MID$ (A$,I,1): REM      SEE PG 60 & 150, APPLESOFT MANUAL
  27. 350  POKE 2054 +I, ASC(C$)
  28. 360  NEXT I
  29. 370  VTAB 1: LIST 10
  30. 375  GOSUB 3010
  31. 380  VTAB 21: HTAB 1: CALL  -958: VTAB 23: HTAB 14: FLASH : PRINT "TYPE:";: NORMAL : PRINT " RUN 400";: NORMAL 
  32. 390  END 
  33. 400  REM <CTRL-M><CTRL-M>        READ BACK FROM MEMORY<CTRL-J>
  34. 410  VTAB 12: CALL  -958: HTAB 3: PRINT "THE NAME OF THE FILE (OR NUMBER) IS:": PRINT : PRINT : PRINT 
  35. 420 A$ = ""
  36. 430  FOR I = 1 TO 22: REM <CTRL-M><CTRL-M>   MORE THAN LONGEST STRING<CTRL-J>
  37. 440 C =  PEEK(2054 +I)
  38. 450 A$ = A$ + CHR$(C)
  39. 460  NEXT I
  40. 470  HTAB 9: PRINT "A$=";A$
  41. 480  VTAB 22: HTAB 10: FLASH : PRINT "(END OF DEMO PROGRAM)": NORMAL : FOR I = 1 TO 2000: NEXT : VTAB 22: HTAB 10: PRINT "(END OF DEMO PROGRAM)"
  42. 490  FOR I = 1 TO 1000: NEXT :G$ = "===> ANY KEY TO RETURN TO MENU......": PRINT : GOSUB 60103: GET K$: PRINT K$;: GOSUB 60110
  43. 495  RESTORE : FOR I = 1 TO 9: READ GT: READ GT$: NEXT : GOTO 2500: REM <CTRL-J><CTRL-J>
  44. 1000  REM -----------------------<CTRL-M><CTRL-M>     SOFTPAL PROGRAM TEXT SCREENS<CTRL-J>
  45. 1010  TEXT : HOME : CLEAR 
  46. 1020 G$ = "HERE IS A TIP ON HOW TO KEEP VARIABLES": GOSUB 60114
  47. 1030 G$ = "AND STRINGS WHEN 'CLEAR' OR 'RUN'": PRINT : GOSUB 60114
  48. 1040 G$ = "ARE USED. THIS IS VERY USEFUL IN A": PRINT : GOSUB 60114
  49. 1050 G$ = "DATA BASE PROGRAM SUCH AS 'AIM' FROM": PRINT : GOSUB 60114
  50. 1060 G$ = "NIBBLE MAGAZINE. THE ORIGINAL AIM": PRINT : GOSUB 60114
  51. 1070 G$ = "CLEARED WHENEVER EXITING A MODULE BACK": PRINT : GOSUB 60114
  52. 1080 G$ = "TO THE MENU, REQUIRING INPUT OF A": PRINT : GOSUB 60114
  53. 1090 G$ = "FILE NAME FOR EVERY MENU SELECTION.": PRINT : GOSUB 60114
  54. 1100 G$ = "I ADDED THE ABILITY": PRINT : GOSUB 60114
  55. 1110 G$ = "TO KEEP THE SAME FILE, OR SELECT ANOTHER": PRINT : GOSUB 60114
  56. 1120 G$ = "FILE WHEN CHANGING MODULES.": PRINT : GOSUB 60114
  57. 1130  FOR I = 1 TO 1000: NEXT : PRINT : GOSUB 3300
  58. 1140  IF K$ = "M"  THEN  RESTORE : FOR I = 1 TO 9: READ GT: READ GT$: NEXT : GOTO 2500
  59. 1150 G$ = "(A MODULE IS A MENU SELECTION SUCH AS:": PRINT : GOSUB 60114
  60. 1160 G$ = "3=VIEW RECORDS, 4=CHANGE RECORDS,": PRINT : GOSUB 60114
  61. 1170 G$ = "5=FIND RECORDS, 6=PRINT RECORDS, ETC)": PRINT : GOSUB 60114
  62. 1180 G$ = "KEEPING THE SAME FILE": PRINT : GOSUB 60114
  63. 1190 G$ = "NAME & VARIABLES IS NO PROBLEM, BUT": PRINT : GOSUB 60114
  64. 1200 G$ = "WHEN CHANGING FILES, A LOT OF VARIABLES": PRINT : GOSUB 60114
  65. 1210 G$ = "HAVE TO BE CLEARED. IF YOU USE 'CLEAR'": PRINT : GOSUB 60114
  66. 1220 G$ = "WHEN YOU SELECT A NEW FILE, HOW": PRINT : GOSUB 60114
  67. 1230 G$ = "DO YOU KNOW WHAT MODULE TO GOTO AFTER": PRINT : GOSUB 60114
  68. 1240 G$ = "THE NEW FILE IS SELECTED, SINCE": PRINT : GOSUB 60114
  69. 1250 G$ = "THAT VARIABLE WAS CLEARED, TOO?": PRINT : GOSUB 60114
  70. 1260  FOR I = 1 TO 1000: NEXT : PRINT : GOSUB 3300
  71. 1270  IF K$ = "M"  THEN  RESTORE : FOR I = 1 TO 9: READ GT: READ GT$: NEXT : GOTO 2500
  72. 1280 G$ = "STORE THE MENU SELECTION NUMBER": PRINT : GOSUB 60114
  73. 1290 G$ = "USING THIS METHOD. OR USE IT TO PASS A": PRINT : GOSUB 60114
  74. 1300 G$ = "FILE NAME FROM ONE PROGRAM TO ANOTHER.": PRINT : GOSUB 60114
  75. 1310 G$ = "HERE'S HOW IT WORKS:IF YOU MAKE": PRINT : GOSUB 60114
  76. 1320 G$ = "YOUR FIRST PROGRAM LINE LIKE THIS": PRINT : GOSUB 60114
  77. 1330 G$ = "10 REM (                         )": PRINT : GOSUB 60114
  78. 1340 G$ = "WITH A MAX OF ABOUT 230 SPACES": PRINT : GOSUB 60114
  79. 1350 G$ = "BETWEEN THE BRACKETS IN ONE LINE": PRINT : GOSUB 60114
  80. 1360 G$ = "THE FIRST SPACE AFTER THE LEFT BRACKET": PRINT : GOSUB 60114
  81. 1370 G$ = "IS STORED AT MEMORY ADDRESS 2055": PRINT : GOSUB 60114
  82. 1380 G$ = "(LINE 1 LENGTH AFFECTS START OF LINE 2)": PRINT : GOSUB 60114
  83. 1390  FOR I = 1 TO 1000: NEXT : PRINT : GOSUB 3300
  84. 1400  IF K$ = "M"  THEN  RESTORE : FOR I = 1 TO 9: READ GT: READ GT$: NEXT : GOTO 2500
  85. 1410 G$ = "ALL YOU HAVE TO DO IS POKE THE VALUE OF": PRINT : GOSUB 60114
  86. 1420 G$ = "THE VARIABLE YOU WANT TO KEEP": PRINT : GOSUB 60114
  87. 1430 G$ = "===> INTO ADDRESS 2055 AND UP": PRINT : GOSUB 60114
  88. 1440 G$ = "EXAMPLE: TO KEEP M=5, POKE 2055,M+112": PRINT : GOSUB 60114
  89. 1450 G$ = "---------------------------------------": PRINT : GOSUB 60114
  90. 1460 G$ = "THERE ARE A FEW LIMITATIONS: DON'T USE": PRINT : GOSUB 60114
  91. 1470 G$ = "A VALUE POKED DIRECTLY INTO MEMORY": PRINT : GOSUB 60114
  92. 1480 G$ = "(WITHOUT USING STRINGS) UNLESS IT'S A": PRINT : GOSUB 60114
  93. 1490 G$ = "SINGLE DIGIT (0-9) WITH 112 ADDED": PRINT : GOSUB 60114
  94. 1500 G$ = "TO AVOID CONTROL CHARACTERS AND ALL OF": PRINT : GOSUB 60114
  95. 1510 G$ = "THOSE BASIC WORDS & ERROR MESSAGES!": PRINT : GOSUB 60114
  96. 1520  FOR I = 1 TO 1000: NEXT : PRINT : GOSUB 3300
  97. 1530  IF K$ = "M"  THEN  RESTORE : FOR I = 1 TO 9: READ GT: READ GT$: NEXT : GOTO 2500
  98. 1540 G$ = "WHEN YOU LIST YOUR PROG SOME STRANGE": PRINT : GOSUB 60114
  99. 1550 G$ = "THINGS CAN HAPPEN WITH CONTROL CHRS!!": PRINT : GOSUB 60114
  100. 1560 G$ = "SO IF IT'S 0-9 POKE IT +112. IF IT'S": PRINT : GOSUB 60114
  101. 1570 G$ = "LESS THAN 0 OR GREATER THAN 9": PRINT : GOSUB 60114
  102. 1580 G$ = "USE STRINGS LIKE THE DEMO PROGRAM SHOWS": PRINT : GOSUB 60114
  103. 1590 G$ = "IN LINES 300-500!!!": PRINT : GOSUB 60114
  104. 1600 G$ = "LIST THE DEMO PROGRAM TO SEE THE SYNTAX.": PRINT : GOSUB 60114
  105. 1610 G$ = "----------------------------------------": PRINT : GOSUB 60114
  106. 1620 G$ = "IF YOU WANT TO PRINT THESE TEXT SCREENS": PRINT : GOSUB 60114
  107. 1630 G$ = "CHANGE LINE 60114 LIKE THIS:": PRINT : GOSUB 60114
  108. 1640 G$ = "60114 PRINT:PRINT G$:RETURN": PRINT G$
  109. 1650  FOR I = 1 TO 1000: NEXT : PRINT : GOSUB 3300
  110. 1660  IF K$ = "M"  THEN  RESTORE : FOR I = 1 TO 9: READ GT: READ GT$: NEXT : GOTO 2500
  111. 1670 G$ = "==> ALMOST FINAL NOTE: <==": PRINT : GOSUB 60114
  112. 1680 G$ = "NOT ALL PROGRAMS WILL LOAD AT 2049": PRINT : GOSUB 60114
  113. 1690 G$ = "SO FIRST SPACE AFTER BRACKET = 2055.": PRINT : GOSUB 60114
  114. 1700 G$ = "SEE THE MEM MAP PROGRAM ON THIS DISK.": PRINT : GOSUB 60114
  115. 1710 G$ = "TO FIND WHERE YOUR PROGRAM LOADS": PRINT : GOSUB 60114
  116. 1720 G$ = "(& LOTS OF OTHER STUFF) 'EXEC MEM MAP'": PRINT : GOSUB 60114
  117. 1730 G$ = "==> FINAL NOTE: <==": PRINT : GOSUB 60114
  118. 1740 G$ = "YOU COULD ALSO USE PAGE 3 OF MEMORY": PRINT : GOSUB 60114
  119. 1750 G$ = "($300-3CF=768-975) TO KEEP VAR & STRINGS": PRINT : GOSUB 60114
  120. 1760 G$ = "BUT TO SEE IT YOU MUST PEEK IT, AND YOU": PRINT : GOSUB 60114
  121. 1770 G$ = "MAY WANT PG 3 FOR MACHINE LANG PROGRAMS.": PRINT : GOSUB 60114:CV =  PEEK(37): VTAB CV: PRINT "----------------------------------------"
  122. 1900  FOR I = 1 TO 1000: NEXT :G$ = "===> ANY KEY TO RETURN TO MENU......": GOSUB 60103: GET K$: PRINT K$;: GOSUB 60110
  123. 1910  RESTORE : FOR I = 1 TO 9: READ GT: READ GT$: NEXT : GOTO 2500: REM <CTRL-J><CTRL-J>
  124. 2000  REM **** TITLE SCREEN ****<CTRL-J>
  125. 2010  TEXT : HOME 
  126. 2020 ST$ = "AND STRINGS"
  127. 2030  VTAB 6: GOSUB 60131
  128. 2040 ST$ = "HOW TO KEEP VARIABLES"
  129. 2050  VTAB 4: GOSUB 60131
  130. 2060  FOR I = 1 TO 1000: NEXT I
  131. 2070  TEXT : HOME : GOSUB 3200: GOSUB 3100
  132. 2080  DATA 11,BY,13,JIM BURWELL,14,PO  BOX 713,15,FT RUCKER ALA 36362,18,SUBROUTINES AT 60000,19,COPYRIGHT,20,NIBBLE MAGAZINE VOL 3 #4,21,(SOME SBR'S HAVE BEEN MODIFIED),23,RETURN FOR MENU....
  133. 2090  FOR I = 1 TO 8: READ GT: READ GT$: VTAB GT: HTAB 2: GOSUB 60107: NEXT 
  134. 2100  READ GT: READ GT$: VTAB GT: HTAB 2: GOSUB 60108
  135. 2110  VTAB 23: HTAB 28: GET Y$: IF Y$ < > CHR$(13)  THEN 2110
  136. 2500  REM    **** MENU ****<CTRL-J>
  137. 2510  HOME : GOSUB 3100: GOSUB 3200
  138. 2520  FOR K = 1 TO 5: READ M$(K): NEXT K
  139. 2530  DATA  "TEXT SCREEN EXPLANATIONS","RUN THE DEMO PROGRAM","LIST THIS WHOLE PROGRAM","LIST DEMO PORTION ONLY","EXIT TO MENU"
  140. 2540  FOR K = 1 TO 5: VTAB (2 *K +9): HTAB 8: PRINT K;". ";M$(K): NEXT K
  141. 2550  VTAB 23: HTAB 6: INVERSE : PRINT "ENTER CHOICE (BY NUMBER): "; CHR$(91);" "; CHR$(93); CHR$(8); CHR$(8);: NORMAL : GET Y$: PRINT Y$:Y =  VAL(Y$): IF Y <1  OR Y >5  THEN 2550
  142. 2560  VTAB (2 *Y +9): HTAB 8: INVERSE : PRINT Y$;". ";M$(Y): NORMAL : FOR KK = 1 TO 800: NEXT KK
  143. 2570  ON Y GOTO 1000,100,4000,4100,5000: REM <CTRL-J><CTRL-J>
  144. 3000  REM -----------------------<CTRL-M>           SUBROUTINES<CTRL-J><CTRL-J>
  145. 3010  PRINT : HTAB 2: PRINT "(THE ABOVE IS AN ACTUAL LISTING": PRINT : PRINT "OF THIS PROGRAM'S LINE 10 AS CHANGED)": RETURN : REM <CTRL-J><CTRL-J>
  146. 3100  VTAB 1: HTAB 1: FOR I = 1 TO 39: PRINT "*";:X = 1: NEXT 
  147. 3110  FOR I = 2 TO 23: VTAB I: HTAB 39: PRINT "*";:X = 1: NEXT 
  148. 3120  VTAB 24: FOR I = 39 TO 1  STEP  -1: HTAB I: PRINT "*";:X = 1: NEXT 
  149. 3130  FOR I = 23 TO 2  STEP  -1: VTAB I: HTAB 1: PRINT "*";:X = 1: NEXT 
  150. 3140  RETURN : REM <CTRL-J><CTRL-J>
  151. 3200  VTAB 3: HTAB 10: INVERSE : PRINT "HOW TO KEEP VARIABLES": PRINT : HTAB 15: PRINT "AND STRINGS": PRINT : HTAB 10: PRINT "DURING CLEAR AND RUN": NORMAL : RETURN : REM <CTRL-J><CTRL-J>
  152. 3300  FOR I = 1 TO 1000: NEXT :G$ = "==> M=MENU.....C=CONTINUE........": GOSUB 60103:CV =  PEEK(37): GET K$: PRINT K$;: IF K$ < >"M"  AND K$ < >"C"  THEN  VTAB (CV +1): HTAB 1: CALL  -868: GOTO 3300
  153. 3310  GOSUB 60110: RETURN : REM <CTRL-J><CTRL-J>
  154. 4000  REM ----------------------<CTRL-M><CTRL-M>       LIST OPTIONS FROM MENU<CTRL-J><CTRL-J>
  155. 4010  TEXT : HOME : LIST 
  156. 4020  GOSUB 61000
  157. 4030  FOR I = 1 TO 1000: NEXT :G$ = "===> ANY KEY TO RETURN TO MENU......": PRINT : GOSUB 60103: GET K$: PRINT K$;: GOSUB 60110
  158. 4040  RESTORE : FOR I = 1 TO 9: READ GT: READ GT$: NEXT : GOTO 2500: REM <CTRL-J><CTRL-J>
  159. 4100  TEXT : HOME : LIST  -500
  160. 4110  FOR I = 1 TO 1000: NEXT :G$ = "===> ANY KEY TO RETURN TO MENU......": PRINT : GOSUB 60103: GET K$: PRINT K$;: GOSUB 60110
  161. 4120  RESTORE : FOR I = 1 TO 9: READ GT: READ GT$: NEXT : GOTO 2500
  162. 5000  REM -----------------------<CTRL-M><CTRL-M>       EXIT TO PAL MENU<CTRL-J><CTRL-J>
  163. 5010  PRINT  CHR$(4);"RUN MENU"
  164. 5020  REM <CTRL-M><CTRL-M>---------------------------------<CTRL-J> 
  165. 59999  END 
  166. 60000  REM <CTRL-M><CTRL-M>*********************************<CTRL-M>  ***** GENERAL PURPOSE *****<CTRL-M><CTRL-M>   SUBROUTINES FOR PROGRAMS<CTRL-M><CTRL-M>     FROM NIBBLE VOL 3 #4<CTRL-M><CTRL-M>*********************************<CTRL-J><CTRL-J>
  167. 60010  REM <CTRL-M><CTRL-M>***** NIBBLE SUBROUTINES *****<CTRL-M><CTRL-M>          (ONE LINE)<CTRL-M><CTRL-M>103 IS SPILL-OUT W/SOUND<CTRL-M><CTRL-M>104 IS ERASE RT-TO-LEFT W/SOUND<CTRL-M><CTRL-M>105 IS ERASE LEFT-RT W/SOUND<CTRL-M><CTRL-M>106-108 ARE STRING CENTERPRINTS<CTRL-M><CTRL-M>114-118 IS CENTER SPREAD-OUT<CTRL-M><CTRL-M>
  168. 60020  REM <CTRL-M><CTRL-M>***** NIBBLE SBR'S CONT'D *****<CTRL-M><CTRL-M>110 IS CENTER-OUT ERASE W/SOUND<CTRL-M>          (FOUR-WAY)<CTRL-M><CTRL-M>120-129 IS PRINT USE FORMATTER<CTRL-M>      XXXXXX.XX MAX NUMBER<CTRL-M><CTRL-M>130-140 IS FALLING LEAVES<CTRL-M><CTRL-M>*******************************<CTRL-J><CTRL-J><CTRL-J>
  169. 60103  FOR X = 1 TO  LEN(G$): PRINT  MID$ (G$,X,1);:XS =  PEEK( -16336) + PEEK( -16336): FOR XX = 1 TO 30: NEXT : NEXT X: RETURN 
  170. 60104  VTAB ( PEEK(37) +1): FOR X =  LEN(G$) TO 1  STEP  -1: HTAB X: CALL  -868:XS = ( -16336) + PEEK( -16336): FOR XX = 1 TO 12: NEXT XX: NEXT X: POKE 37, PEEK(37) -1: RETURN 
  171. 60105  VTAB ( PEEK(37) +1): FOR X = 2 TO 40: POKE 33,X: CALL  -868:XS = ( -16336) + PEEK( -16336): FOR XX = 1 TO 12: NEXT XX: NEXT X: POKE 37, PEEK(37) -1: RETURN 
  172. 60106 G% = (40 - LEN(G$))/2: PRINT  SPC( G%);G$: RETURN 
  173. 60107 G% = (37 - LEN(GT$))/2: PRINT  SPC( G%);GT$;: RETURN 
  174. 60108 G% = (36 - LEN(GT$))/2: PRINT  SPC( G%);: INVERSE : PRINT GT$;: NORMAL : RETURN 
  175. 60110  FOR X = 1 TO 12: POKE 34,(12 -X): POKE 35,(12 +X): POKE 33,(4 +3 *X): POKE 32,(24 -2 *X): HOME : FOR XX = 1 TO 3:XS =  PEEK( -16336) + PEEK( -16336): NEXT XX: NEXT X: RETURN 
  176. 60114 CV =  PEEK(37):GS$ = "": IF  LEN(G$) = 40  THEN 60117
  177. 60115  IF  LEN(G$) = 39  THEN G$ = G$ +" ": GOTO 60117
  178. 60116  FOR X = 1 TO (20 - LEN(G$)/2):GS$ = GS$ +" ": NEXT X:G$ = GS$ +G$ +GS$: IF  LEN(G$)/2 < > INT( LEN(G$)/2)  THEN G$ = G$ +" "
  179. 60117  IF CV = 0  THEN CV = 1
  180. 60118  FOR X = 1 TO 20:GP$ =  LEFT$(G$,X) + RIGHT$(G$,X): VTAB CV: HTAB 21 -X: PRINT GP$:XS =  PEEK( -16336) + PEEK( -16336): NEXT X: RETURN : REM  <CTRL-J><CTRL-J>
  181. 60120  REM **********************<CTRL-M><CTRL-M>        ** PRINT USING SBR **<CTRL-M><CTRL-M>        XXXXXX.XX MAX # ENTRY<CTRL-M><CTRL-M>         OUTPUT:$ XXX,XXX.XX<CTRL-M><CTRL-M>     ****************************<CTRL-J><CTRL-J>
  182. 60121  REM =>INPUT VARIABLE IS GV<CTRL-M>=>OUTPUT VARIABLE IS GV$<CTRL-M><CTRL-M>=>COLUMN WIDTH IS GW (DEFAULT 10)<CTRL-M>=># DECIMAL PLACES IS GN (DEF 2)<CTRL-M><CTRL-M>VAR USED: GN,GQ,GV,GW; GI$,GV$<CTRL-M><CTRL-M>*** MAX INPUT =>999,999.99<= ***<CTRL-J><CTRL-J>
  183. 60122 GN = GN +2 *(GN = 0):GW = GW +10 *(GW = 0): REM DEFAULTS GN TO 2, GW TO 10
  184. 60123  IF   NOT GW  THEN GW = 10
  185. 60124 GI$ = " " + STR$( INT(GV *10 ^GN +.5)):GQ =  LEN(GI$) -( VAL(GI$) <0):GV$ = "": FOR X = 1 TO (GW -3):GV$ = GV$ +" ": NEXT 
  186. 60125 GV$ = GV$ + MID$ (GI$,1 +( VAL(GI$) <0),(GQ < = GN) +(GQ -GN) *(GQ >GN) -3 *(GV > = 1000)): IF GV > = 1000  THEN GV$ = GV$ +"," + RIGHT$( STR$( INT(GV -1000 * INT(GV/1000)) +1000),3)
  187. 60126 GV$ = GV$ + MID$ ("0.00",1 +((GN +1) <GQ),1 +(GN -GQ +2) *(GQ <GN +2)) + RIGHT$(GI$,GN *(GQ >GN) +(GQ -1) *(GQ < = GN)):GV$ =  RIGHT$(GV$,GW)
  188. 60127  IF  MID$ (GV$,( LEN(GV$) -1),1) = " "  THEN GV$ = " " + LEFT$(GV$,( LEN(GV$) -2)) + RIGHT$(GV$,1)
  189. 60128 GV$ = "$" +" " +GV$: RETURN 
  190. 60129  REM <CTRL-M><CTRL-M>=================================<CTRL-J>
  191. 60130  REM ----------------------<CTRL-M><CTRL-M>    FALLING LEAVES SUBROUTINE<CTRL-J><CTRL-J>
  192. 60131 L =  PEEK(37): IF   NOT QQ  THEN  DIM R$(40),DL(40):QQ = 1
  193. 60132  POKE 216,0: FOR X = 0 TO 39:R$(X) = " ":DL(X) = 0: NEXT X: FOR X = 1 TO  LEN(ST$):R$(X) =  MID$ (ST$,X,1): NEXT X: FOR X = 0 TO  LEN(ST$) -1:DL(X) =  INT(( RND(1) *L) -L): NEXT 
  194. 60133  FOR X = 0 TO  LEN(ST$):DL(X) = DL(X) +1: IF DL(X) >L  THEN DL(X) = L
  195. 60134  IF DL(X) = 0  THEN DL(X) = 1
  196. 60135  IF DL(X) <1  THEN 60138
  197. 60136  HTAB (X + INT((20 - LEN(ST$)/2))): VTAB DL(X): PRINT R$(X): IF DL(X) = 1  THEN 60138
  198. 60137  HTAB (X + INT((20 - LEN(ST$)/2))): VTAB DL(X) -1: PRINT " "
  199. 60138  NEXT X
  200. 60139  FOR X = 0 TO  LEN(ST$) -1: IF DL(X) < >L  THEN 60133
  201. 60140  NEXT X: RETURN 
  202. 61000  PRINT : PRINT : PRINT :G$ = "*********************************": PRINT : GOSUB 60114
  203. 61010 G$ = "THA-THA...THA-THA...": PRINT : GOSUB 60114
  204. 61020 G$ = "THAT'S ALL FOLKS!!!": PRINT : GOSUB 60114
  205. 61030 G$ = "*********************************": PRINT : GOSUB 60114: RETURN